<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Publicacion extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
		
		//Cargamos el helper form para poder utilizar todas las funciones de el, como subir archivos.
		$this->load->helper('form');
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todas las publicaciones de clientes activas o inactivas pero NO las borradas (-1). En el caso de pasar un id de cliente
	//en la URL se muestra solo las publicaciones de ese cliente. Si se pasa cero no se muestra nada.
	function consultar($idCliente=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			//Segunda comprobacion: que idCliente sea numerico y mayor o igual que cero. Igual que cero quiere decir que no hay que mostrar ninguna publicacion.
			if(is_numeric($idCliente) && $idCliente>=0){
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo el modelo donde estan los datos de los clientes registrados para pedirle un listado con todos ellos
				$this->load->model('m_cliente');
				
				//Busco todos los clientes activos
				$listadoClientes = $this->m_cliente->buscarActivos();
				
				//Le paso el listado de todos los clientes a la vista para que los muestre en un combo de filtrado
				$datos['clientes'] = $listadoClientes;
				
				//Le paso a la vista el id del cliente seleccionado
				$datos['idClienteSel'] = $idCliente;
				
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Restricciones a la consulta de la busqueda de publicaciones de clientes segun el cliente seleccionado
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				$restriccion = " AND cliente.idCliente=".$idCliente;
							
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo el modelo donde estan los datos de las publicaciones de clientes registrados
				$this->load->model('m_publicacion');
										
				//Busco todas las publicaciones de clientes, tanto activos como inactivos, menos las borradas(-1)
				$listadoPublicaciones = $this->m_publicacion->buscar($restriccion);
				
				//Le paso el listado de todas las publicaciones de clientes a la vista para que los muestre en una tabla
				$datos['publicaciones'] = $listadoPublicaciones;
												
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo la vista donde se muestra la tabla de publicacaciones de clientes y la guardo en una variable para pasarsela a la vista principal
				$datosPrincipal['vista'] = $this->load->view('v_publicaciones', $datos, true);
				
				//Cargo la vista principal con los datos de la vista consultar publicaciones
				$this->load->view('v_admin', $datosPrincipal);
			} else {
				//No se han pasado los parametros minimos necesarios para consultar los servicios de clientes existentes.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	function eliminar($idPublicacion=null, $idCliente=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			//Segunda comprobacion: Que idPublicacion sea numerico y mayor que cero. Ademas que idCliente sea numerico y mayor que cero.			
			if(is_numeric($idPublicacion) && $idPublicacion>0 && is_numeric($idCliente) && $idCliente>0){
				//Cargo el modelo donde estan los datos de las publicaciones de clientes registradas
				$this->load->model('m_publicacion');
				
				//Elimino a la publicacion del cliente pasado por la url
				$respuesta = $this->m_publicacion->eliminar($idPublicacion, $this->session->userdata('idUsuarioLog'));
				
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo el modelo donde estan los datos de los clientes registrados para pedirle un listado con todos ellos
				$this->load->model('m_cliente');
				
				//Busco todos los clientes activos
				$listadoClientes = $this->m_cliente->buscarActivos();
				
				//Le paso el listado de todos los clientes a la vista para que los muestre en un combo de filtrado
				$datos['clientes'] = $listadoClientes;
				
				//Le paso a la vista el id del cliente seleccionado
				$datos['idClienteSel'] = $idCliente;
				
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Restricciones a la consulta de la busqueda de publicaciones de clientes segun el cliente seleccionado
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				$restriccion = " AND cliente.idCliente=".$idCliente;
							
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo el modelo donde estan los datos de las publicaciones de clientes registrados
				$this->load->model('m_publicacion');
										
				//Busco todas las publicaciones de clientes, tanto activos como inactivos, menos las borradas(-1)
				$listadoPublicaciones = $this->m_publicacion->buscar($restriccion);
				
				//Le paso el listado de todas las publicaciones de clientes a la vista para que los muestre en una tabla
				$datos['publicaciones'] = $listadoPublicaciones;
				
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo la vista donde se muestra la tabla de servicios de clientes
				$this->load->view('v_publicaciones', $datos);
			} else {
				//No se han pasado todos los parametros necesarios para borrar un registro
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se han pasado todos los parametros necesarios para borrar un registro.");
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un registro.");
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function abrirPantallaCrear($idCliente=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){							
			//Segunda comprobacion: que idCliente sea numerico y mayor o igual que cero.
			if(is_numeric($idCliente) && $idCliente>=0){
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo el modelo donde estan los datos de los clientes registrados para pedirle un listado con todos ellos
				$this->load->model('m_cliente');
				
				//Busco todos los clientes activos
				$listadoClientes = $this->m_cliente->buscarActivos();
				
				//Le paso el listado de todos los clientes a la vista para que los muestre en un combo
				$datos['clientes'] = $listadoClientes;
				
				//Le paso a la vista el id del cliente seleccionado
				$datos['idClienteSel'] = $idCliente;
				
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo la vista donde se muestra el formulario para crear una publicacion de cliente y la guardo en una variable para pasarsela a la vista principal
				$datosPrincipal['vista'] = $this->load->view('v_publicaciones_crear',$datos, true);
				
				//Cargo la vista principal con los datos de la vista para crear una publicacion
				$this->load->view('v_admin', $datosPrincipal);
			} else {
				//No se han pasado todos los parametros necesarios para crear un registro
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function crear(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			//Segunda comprobacion: Que se haya pasado por post el cliente, titulo, descripcion, la imagen, url, nombre del sitio, tipo de sitio, grupo y estado de la publicacion a crear
			if(is_numeric($this->input->post('cliente',true)) && $this->input->post('cliente',true)>0 &&
			   $this->input->post('titulo',true)!="" &&
			   $this->input->post('descripcion',true)!="" &&  
			   $this->input->post('url',true)!="" &&
			   $this->input->post('nombreSitio',true)!="" &&
			   ($this->input->post('tipoSitio',true) == 'Blog' || $this->input->post('tipoSitio',true) == 'Blog454545454545') &&
			   is_numeric($this->input->post('grupo',true)) && $this->input->post('grupo',true)>=0 &&
			   ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){
				
				//Detalles de las configuraciones del archivo a subir
				$config['upload_path'] = "./img/publicaciones";
				$config['allowed_types'] = 'gif|jpg|png|jpeg';
				$config['max_size'] = '10000';
				$this->load->library('upload', $config);
								
				$archivo = '';
				//Si no se subio el archivo hacer lo siguiente
				if (!$this->upload->do_upload('archivo')){
					$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
				//Si se subio el archivo hacer lo siguiente
				}else{
					//Datos del archivo subido
					$upload_data = $this->upload->data();
					$archivo = $upload_data['file_name'];
					$extensionArchivo = $upload_data['file_ext'];
					
					//Mensaje que se va a mostrar
					$mensaje = 'Se ha subido el archivo correctamente.';
				}
				
				//Cargo el modelo donde estan los datos de las publicaciones
				$this->load->model('m_publicacion');
				
				//Creamos la publicacion
				$resultado = $this->m_publicacion->crear($this->input->post('cliente',true),
														  $this->input->post('titulo',true),
														  $this->input->post('descripcion',true),
														  $archivo,
														  $this->input->post('url',true),
														  $this->input->post('nombreSitio',true),
														  $this->input->post('tipoSitio',true),
														  $this->input->post('grupo',true),0,
														  $this->input->post('estado',true), $this->session->userdata('idUsuarioLog'));
				if($resultado == 1){
					echo("<script> alert('La publicaci\u00f3n se ha creado correctamente.');</script>");
				}else{
					echo("<script> alert('La publicaci\u00f3n no se ha creado. Ha habido un error.');</script>");
				}
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function abrirPantallaModificar($idPublicacion=null, $idCliente=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			//Segunda comprobacion: Que idPublicacion pasado sea numerico y mayor que cero. Lo mismo para idCliente.
			if(is_numeric($idPublicacion) && $idPublicacion>0 && is_numeric($idCliente) && $idCliente>0){
				//Cargo el modelo donde estan los datos de las publicaciones de clientes registrados
				$this->load->model('m_publicacion');
				
				//Busco a la publicacion de cliente que hay que modificar
				$publicacion = $this->m_publicacion->get($idPublicacion);
				
				//Cargo el modelo donde estan los datos de los clientes registrados
				$this->load->model('m_cliente');
				
				//Busco al cliente para comprobar que existe
				$cliente = $this->m_cliente->get($idCliente);
				
				//Tercera comprobacion: Que la publicacion del cliente pasado por la url sea existente. Lo mismo para el cliente
				if($publicacion->num_rows() == 1 && $cliente->num_rows() == 1){
					//Le paso la publicacion a modificar a la vista
					$datos['publicacionSel'] = $publicacion;
					
					//Le paso a la vista el id del cliente seleccionado
					$datos['idClienteSel'] = $idCliente;
					
					//Busco a la publicacion siguiente del que hay que modificar
					$idPublicacionSig = $this->m_publicacion->getContiguo($idPublicacion,1, $idCliente);
					
					//Le paso la publicacion del cliente siguiente del que hay que modificar a la vista
					$datos['idPublicacionSig'] = $idPublicacionSig;
					
					//Busco a la publicacion de cliente anterior del que hay que modificar
					$idPublicacionAnt = $this->m_publicacion->getContiguo($idPublicacion,-1, $idCliente);
					
					//Le paso la publicacion de cliente anterior del que hay que modificar a la vista
					$datos['idPublicacionAnt'] = $idPublicacionAnt;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los clientes registrados para pedirle un listado con todos ellos
					$this->load->model('m_cliente');
					
					//Busco todos los clientes activos e inactivos. Ya que un referente puede ser un cliente inactivo
					$listadoClientes = $this->m_cliente->buscar();
					
					//Le paso el listado de todos los clientes a la vista para que los muestre en un combo
					$datos['clientes'] = $listadoClientes;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo la vista donde se muestra el formulario para modificar una publicacion y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_publicaciones_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar una publicacion
					$this->load->view('v_admin', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//No se han pasado los parametros minimos necesarios para modificar un servicio de cliente
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function modificar($idPublicacion=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){	   
			//Segunda comprobacion: Que se haya pasado por post el cliente, titulo, descripcion, url, nombre del sitio, tipo de sitio, grupo y estado de la publicacion a modificar
			//Ademas que se haya pasado por la url el id de la publicacion a modificar
			if(is_numeric($idPublicacion) && $idPublicacion>0 && $this->input->post('titulo',true)!="" && $this->input->post('descripcion',true)!="" && $this->input->post('url',true)!="" && $this->input->post('nombreSitio',true)!="" &&
			   ($this->input->post('tipoSitio',true) == 'Blog' || $this->input->post('tipoSitio',true) == 'Blog454545454545') && is_numeric($this->input->post('grupo',true)) && $this->input->post('grupo',true)>=0 &&
			   ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){				
				//Cargo el modelo donde estan los datos de las publicaciones
				$this->load->model('m_publicacion');
				
				//Busco a la publicacion que hay que modificar
				$publicacion = $this->m_publicacion->get($idPublicacion);
				
				//Tercera comprobacion: Que la publicacion pasada por la url sea existente
				if($publicacion->num_rows() == 1){					
					//Guardamos el nombre actual del archivo para que no se modifique
					$archivo = $publicacion->row()->imagen;
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./img/publicaciones";
					$config['allowed_types'] = 'gif|jpg|png|jpeg';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$band=0;
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
												
						$band=1;
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
					}
					
					//Cargo el modelo donde estan los datos de las publicaciones
					$this->load->model('m_publicacion');
					
					//Creamos la publicacion
					$resultado = $this->m_publicacion->modificar($idPublicacion,																  
																 $this->input->post('titulo',true),
																 $this->input->post('descripcion',true),
																 $archivo,
																 $this->input->post('url',true),
																 $this->input->post('nombreSitio',true),
																 $this->input->post('tipoSitio',true),
																 $this->input->post('grupo',true),
																 $this->input->post('estado',true));				
					
					if($resultado == 1){
						echo("<script> alert('La publicaci\u00f3n se ha modificado correctamente. ".$mensaje."');</script>");
						
						if($band == 1)	echo("<script> window.parent.actualizarImagen('".base_url() .'img/publicaciones/'.$archivo."');</script>");						
					} else{
						echo("<script> alert('La publicaci\u00f3n no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
		}
	}
}

/* End of file servicioxcliente.php */
/* Location: ./application/controllers/servicioxcliente.php */